/*
 * Progetto PPS2012 - seegwords
 *
 * Ettore Chimenti
 * Giuliano De Angelis
 * 
 * @02.2013
 * 
 * 4) Realizzare un mini motore di ricerca, implementato attraverso una lista inversa:
 * http://en.wikipedia.org/wiki/Inverted_index
 * 
 * Leggere un insieme di documenti .txt da una directory. Si crei una classe MotoreDiRicerca che 
 * permette di effettuare ricerche efficienti realizzando una lista inversa.
 * In particolare, la classe prende i documenti e crea una la lista inversa:
 * parola->lista_documenti_che_la_contengono
 * 
 * Implementare un metodo Search che prende in ingresso una stringa e ritorna un vettore di documenti.
 * In particolare, il metodo Search separa la stringa in un insieme di parole. I documenti ritornati 
 * sono trovati intersecando le liste relative alle parole. 
 * 
 */
#ifndef WORD_H
#define WORD_H

class Word{
protected:  
  std::set<int>*		docs;
public:
  virtual void 			Operation 	(std::set<int>& result) = 0;
  virtual const std::set<int>& 	GetDocs	  	() 			= 0;
  Word(std::set<int>*		docs_) 		:  docs(docs_) {};
  virtual 			~Word() 		       {}; 
};

class And: public Word{
public:
  virtual void 			Operation	(std::set<int>& result);  
  virtual const std::set<int>& 	GetDocs		();
  And(std::set<int>*		docs_) 		:  Word (docs_) {};  
  virtual 			~And();
};

class Or: public Word{
public:
  virtual void 			Operation	(std::set<int>& result);  
  virtual const std::set<int>& 	GetDocs		();
  Or(std::set<int>*		docs_) 		:  Word (docs_) {};  
  virtual 			~Or();
};

class Not: public Word{
public:
  virtual void 			Operation	(std::set<int>& result);  
  virtual const std::set<int>& 	GetDocs		();
  Not(std::set<int>*		docs_) 		:  Word (docs_) {};  
  virtual 			~Not();
};
#endif